package com.java.thread;

import com.java.util.IHello;

//基于object中的wait方法,notify方法实现线程之间的通讯
//wait/notify/nofityall这些方法必须用在同步方法或同步代码块内部,由对象锁调用,用于实现线程之间的通讯
//wait方法:调用此方法的线程进入等待队列,并且会让出CPU,释放锁
//notify/notifyAll方法: 调用此方法的线程用于通知处于等待状态的线程,可以进入就绪态.
public class WaitNotifyTests {
    static String content;
    public static void main(String[] args) {
        new Thread(){
            @Override
            public void run() {
                    content="jsdtn2305";
                    synchronized (WaitNotifyTests.class) {
                        //唤醒具备相同锁并且处于wait状态的线程
                        WaitNotifyTests.class.notifyAll();
                        //......
                    }
            }
        }.start();

        //主线程
        synchronized (WaitNotifyTests.class) {
            IHello.show();
            while (content == null)
                try{WaitNotifyTests.class.wait();}catch (InterruptedException e){}
            System.out.println(content.toUpperCase());//NullPointerException (NPE)
        }
    }
}
